原生JavaScript无缝轮播图特效 |
您所在的位置:网站首页 › html 轮播图特效 › 原生JavaScript无缝轮播图特效 |
什么是轮播图?
轮播图,图片旋转器,滑片,无论你怎么叫这玩意,它在网络上无处不在。轮播图在电商网站主页上广泛应用,大多数电商网站的主页上都有它: 高大上的无缝轮播 本轮播图Demo 由于仿色压缩将就看吧!(手动滑稽) 喏~两个链接甩给泥萌 Github仓库文件 在线Demo(移动端加载很慢) 前言网上有很多的轮播图特效,部分采用的transition属性结合JS实现滚动,但是很遗憾没有无缝效果,什么是无缝?我给前端小白画了一个示意图。另外本文是我写的第一篇文章,难免有生疏之处。包含很多知识点回顾,很适合JS新手学习。 实际上1-5才是真正的图片(红色的东西是个iphone哈哈,当作是container吧)当焦点位于图片1时,如果再往前滚的话,整个队列会被拉倒真正的第五张图。至于真正的图片1前面的副本图片5只是让用户产生视觉差,从而不会让用户明显感觉到图片被倒向了图片5,看起来就像时无缝轮播。 同理当焦点位于图片5时,如果再往后滚,道理同上不再赘述。 实现功能1.当鼠标放入容器内时左右出现控制按钮,并且轮播动画停止。 2.当鼠标移出时,控制按钮隐藏,轮播继续。 3.焦点随图片的滚动而变化。 4.跳跃点击焦点,会跳转到相应的图片。 5.以及前沿所述的无缝轮播。 开搞~~ Html代码:(内有注释解析) //初始状态是真正的图片1,也就是绝对定位-600px ![](img/555.jpg) ![](img/111.jpg) ![](img/222.jpg) ![](img/333.jpg) ![](img/444.jpg) ![](img/555.jpg) ![](img/111.jpg) //动画开始时小圆点位于第一个 //后一个箭头 开始讲解代码: 1.箭头控制 var prev=document.getElementById("prev"); var next=document.getElementById("next"); var list=document.getElementById("list"); prev.onclick=function(){ list.style.left=parseInt(list.style.left)-600+"px"; } next.onclick=function(){ list.style.left=parseInt(list.style.left)+600+"px"; }给a标签绑定点击事件,先获取list的left属性并且取出数字进行运算操作。下面我们来做一些优化,把定义一个function animate()函数,传入offset参数,并把var newLeft=parseInt(list.style.left) +offset;,然后让prev和next的点击事件调用这个函数。 function animate(offset){ list.style.left=newLeft+offset+"px"; } prev.onclick=function(){ animate(-600); } next.onclick=function(){ animate(600); }然后我们会发现当我们点击到第五张图片left=-3000px时,它应该滚到真正的第1张而不是副本1。我们可以像下面这样写实现无缝滚动: function animate(offset){ list.style.left=newLeft+offset+"px"; if (newLeft >-600) { list.style.left=-3000+"px"; }; if (newLeft 0 && parseInt(list.style.left) < newLeft) || (speed < 0 && parseInt(list.style.left) > newLeft)) { list.style.left = parseInt(list.style.left) + speed + 'px'; setTimeout(go, inteval);//递归函数 } else { animated=false; list.style.left=newLeft+"px"; if (newLeft >-600) { list.style.left=-3000+"px"; }; if (newLeft window.onload = function () { var prev = document.getElementById("prev"); var next = document.getElementById("next"); var list = document.getElementById("list"); var buttons = document.getElementById("buttons").getElementsByTagName("span"); var container = document.getElementById("container"); var index = 1; var timer; var animated = false; function shownButton() { for (var i = 0; i < buttons.length ; i++) { if ( buttons[i].className == 'on') { buttons[i].className = ''; /* prev和next每click一次, 就会清除一次前一个class为on的span元素, 所以没有必要再去循环下面的span*/ break; } // 或者直接遍历清除 buttons[i].className=""; } buttons[index - 1].className = "on"; } function animate(offset) { var time = 300; var inteval = 10; var speed = offset / (time / inteval); animated = true;//更改全局变量,防止跳图 var newLeft = parseInt(list.style.left) + offset; function go() { if ( (speed > 0 && parseInt(list.style.left) < newLeft) || (speed < 0 && parseInt(list.style.left) > newLeft)) { list.style.left = parseInt(list.style.left) + speed + 'px'; setTimeout(go, inteval); } else { animated = false;//全局变量 list.style.left=newLeft+"px"; if (newLeft > -600) { list.style.left =- 3000 + "px"; }; if (newLeft |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |